JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড যা ক্লাইন্ট এবং সার্ভারের মধ্যে নিরাপদে তথ্য বিনিময় করতে ব্যবহৃত হয়। এটি সাধারণত Authentication এবং Authorization প্রক্রিয়ার জন্য ব্যবহৃত হয়। JWT টোকেন একটি এনক্রিপ্টেড বা সিগনেচার করা স্ট্রিং যা টোকেনের ভিতরে কিছু গুরুত্বপূর্ণ তথ্য ধারণ করে, যেমন ব্যবহারকারীর পরিচয় এবং তাদের অ্যাক্সেসের অনুমতি।
JWT ব্যবহার করার মাধ্যমে, একবার ব্যবহারকারী লগইন করলে, সার্ভার একটি JWT টোকেন জেনারেট করে এবং ব্যবহারকারীকে পাঠিয়ে দেয়, যা পরে পরবর্তী প্রতিটি রিকোয়েস্টের সঙ্গে ক্লাইন্ট দ্বারা সার্ভারে পাঠানো হয়। সার্ভার এই টোকেন যাচাই করে ব্যবহারকারীর পরিচয় নিশ্চিত করে এবং সঠিকভাবে এক্সেস প্রদান করে।
JWT এর গঠন
একটি JWT টোকেন তিনটি প্রধান অংশে বিভক্ত থাকে:
- Header:
- টোকেনের প্রকার এবং সিগনেচার অ্যালগরিদম (যেমন HMAC SHA256 অথবা RSA) উল্লেখ করে।
উদাহরণ:
{ "alg": "HS256", "typ": "JWT" }
- Payload:
- এতে টোকেনের মধ্যে সংরক্ষিত তথ্য বা Claims থাকে। Claims হলো এমন কিছু তথ্য যা টোকেনের মাধ্যমে পাঠানো হয়, যেমন ব্যবহারকারীর পরিচয়, অ্যাক্সেসের অনুমতি ইত্যাদি।
উদাহরণ:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }- এখানে
"sub"হল subject (ব্যবহারকারীর ID),"name"ব্যবহারকারীর নাম এবং"iat"হল "issued at" টাইমস্ট্যাম্প।
- Signature:
- এটি টোকেনের অখণ্ডতা এবং নিরাপত্তা নিশ্চিত করে। সার্ভারের সিক্রেট কী ব্যবহার করে Header এবং Payload এর একটি এনক্রিপ্টেড সিগনেচার তৈরি করা হয়। এটি নিশ্চিত করে যে টোকেনের তথ্য কোনোভাবে পরিবর্তিত হয়নি।
উদাহরণ:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT একটি বেস64 এন্কোডেড স্ট্রিং হিসেবে তিনটি অংশে বিভক্ত হয়ে থাকে, এবং সাধারণত এটি এইরকম দেখায়:
header.payload.signature
JWT Authentication Flow
- Login Request:
- ব্যবহারকারী তাদের ব্যবহারকারী নাম এবং পাসওয়ার্ড দিয়ে সার্ভারে একটি রিকোয়েস্ট পাঠায়।
- সার্ভার পাসওয়ার্ড যাচাই করে এবং সঠিক হলে JWT টোকেন জেনারেট করে।
- JWT Generation:
- সার্ভার JWT টোকেন জেনারেট করে, যাতে ব্যবহারকারীর তথ্য থাকে (যেমন, ID, রোল ইত্যাদি), এবং এই টোকেনটি ক্লাইন্টকে পাঠায়।
- Send JWT with Requests:
- ক্লাইন্ট এই JWT টোকেনটি পরবর্তী HTTP রিকোয়েস্টে Authorization Header এর মাধ্যমে পাঠায়।
উদাহরণ:
Authorization: Bearer <token>
- Token Validation:
- সার্ভার রিকোয়েস্ট প্রাপ্তির পর, টোকেনটি যাচাই করে। যদি টোকেনটি সঠিক এবং বৈধ হয়, তাহলে সার্ভার ব্যবহারকারীকে অ্যাক্সেস প্রদান করে।
- সার্ভার সিক্রেট কী বা পাবলিক কী ব্যবহার করে টোকেনটির সিগনেচার যাচাই করে।
- Access Granted:
- টোকেনটি বৈধ হলে, সার্ভার রিকোয়েস্টে অ্যাক্সেস প্রদান করে, যেমন ডেটা পাঠানো বা কোনো এক্সপেন্সিভ রিসোর্সে অ্যাক্সেস।
JWT এর সুবিধা
- Stateless Authentication:
- JWT একটি স্টেটলেস Authentication প্রক্রিয়া, যেখানে সার্ভার ব্যবহারকারীর সেশন বা অবস্থান ট্র্যাক করে না। ব্যবহারকারী সার্ভারে বারবার লগইন না করে শুধুমাত্র টোকেন ব্যবহার করে সব রিকোয়েস্ট করতে পারে।
- Scalability:
- যেহেতু JWT এর মধ্যে সমস্ত তথ্য সংরক্ষিত থাকে, এটি সার্ভার সাইডে কোনো সেশন স্টোর করার প্রয়োজন নেই, তাই সিস্টেম আরও স্কেলেবল হয়।
- Cross-platform Support:
- JWT একটি ওপেন স্ট্যান্ডার্ড হওয়ায়, এটি বিভিন্ন প্ল্যাটফর্ম এবং ভাষায় সহজেই ব্যবহার করা যায়, যেমন Node.js, Java, Python, এবং .NET।
- Security:
- JWT এনক্রিপ্টেড বা সিগনেচার করা থাকে, তাই এটি সুরক্ষিত। এছাড়া, টোকেনটি নির্দিষ্ট সময়ের জন্য বৈধ থাকে (exp - expiration time), যা এক্সপায়ার হলে পুনরায় লগইন করতে হয়।
JWT Authentication এর বাস্তব প্রয়োগ
ASP.NET Core অ্যাপ্লিকেশনে JWT Authentication সেটআপ করার জন্য আপনাকে কিছু নির্দিষ্ট স্টেপ অনুসরণ করতে হবে:
Install NuGet Packages:
- JWT Authentication ব্যবহার করতে
Microsoft.AspNetCore.Authentication.JwtBearerপ্যাকেজ ইনস্টল করুন।
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer- JWT Authentication ব্যবহার করতে
Configure JWT Authentication in Startup.cs:
Startup.csফাইলে Authentication মেথড কনফিগার করুন:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "yourIssuer", ValidAudience = "yourAudience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey")) }; }); }Generate JWT Token:
- লগইন বা রেজিস্ট্রেশনের পরে JWT টোকেন জেনারেট করুন:
public string GenerateJWT(User user) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, user.UserId.ToString()), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey")); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "yourIssuer", audience: "yourAudience", claims: claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); }- Use JWT in Requests:
- JWT টোকেনটি ক্লাইন্ট থেকে সার্ভারে পাঠান। সাধারণত এটি Authorization Header এর মাধ্যমে করা হয়।
সারাংশ
JWT (JSON Web Token) হল একটি স্ট্যান্ডার্ড যা নিরাপদ এবং স্টেটলেস অথেন্টিকেশন সিস্টেম তৈরির জন্য ব্যবহৃত হয়। এটি ক্লাইন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান সহজতর করে এবং নিরাপত্তা নিশ্চিত করে। JWT সার্ভারের উপর কোনো স্টেট ধারণ করে না, ফলে এটি বেশি স্কেলেবল এবং ফাস্ট। ASP.NET Core অ্যাপ্লিকেশনে JWT Authentication সেটআপ করতে কিছু নির্দিষ্ট কনফিগারেশন এবং কোড প্রয়োজন, যা সার্ভারের উপর ব্যবহারকারীর অ্যাক্সেস কন্ট্রোল এবং সুরক্ষা নিশ্চিত করে।
Read more